package com.demo.core.service.base;

import java.util.List;
import java.util.Map;

import com.demo.core.model.RoleFunction;

/**
 * 角色功能关系服务
 * 
 * @author ryuu.kk
 *
 */
public interface RoleFunctionService {

	/**
	 * 存储角色功能关系模型
	 * @param roleFunction 角色功能模型
	 * @return 主键ID
	 */
	Long save(RoleFunction roleFunction);
	
	/**
	 * 存储角色功能关系模型列表
	 * @param roleFunctionList
	 */
	void saveList(Long roleId, List<RoleFunction> roleFunctionList);
	
	/**
	 * 角色对应功能是否存在
	 * @param id 主键ID
	 * @return 是否存在
	 */
	boolean exist(Long id);
	
	/**
	 * 删除角色功能对应模型
	 * @param id 主键ID
	 */
	void delete(Long id);
	
	/**
	 * 删除角色功能模型
	 * @param roleId 角色ID
	 */
	void deleteAll(Long roleId, Long siteId);
	
	/**
	 * 删除指定功能上的所有角色
	 * @param functionId 功能id
	 */
	void deleteRole(Long functionId, Long siteId);
	
	/**
	 * 更新角色功能状态
	 * @param id 外键ID
	 * @param enabled 是否可用
	 * @param status 状态
	 */
	void update(Long id, boolean enabled, String status);
	
	/**
	 * 通过主键ID查询角色功能模型
	 * @param id 功能ID
	 * @return 角色功能模型List
	 */
	RoleFunction find(Long id);
	
	/**
	 * 通过角色ID查询角色对用的功能模型列表
	 * @param roleId 角色ID
	 * @return 角色功能模型List
	 */
	List<RoleFunction> findAll(Long roleId);
	
	/**
	 * 通过角色ID查询角色对用的功能模型列表
	 * 带有Function和Role模型的对象列表
	 * @param roleId 角色ID
	 * @return 角色功能模型List
	 */
	List<RoleFunction> query(Long roleId);
	
	/**
	 * 通过站点ID与功能ID查询对应的角色对象
	 * 带有Function和Role模型的对象列表
	 * @param functionId 功能ID
	 * @param siteId 站点ID
	 * @return 角色功能模型List
	 */
	List<RoleFunction> query(Long functionId, Long siteId);
	
	/**
	 * 通过站点ID与角色ID查询对应的角色对象
	 * 带有Function和Role模型的对象列表
	 * @param siteId 站点ID
	 * @param roleId 角色ID
	 * @param enabled 角色是否可用
	 * @return 角色功能模型List
	 */
	List<RoleFunction> query(Long siteId, Long roleId, Boolean enabled);
	
	/**
	 * 通过站点ID与角色ID查询对应的角色对象
	 * 带有Function和Role模型的对象列表
	 * @param siteId 站点ID
	 * @param roleId 角色ID
	 * @param enabled 角色是否可用
	 * @return 角色功能模型Map
	 */
	Map<Long, RoleFunction> queryMap(Long siteId, Long roleId, Boolean enabled);
}
